在自定义手册页中包含来自外部文件的变量或 shell 命令?
Include variables from external files or shell commands in custom man page?
我正在编写一些自定义 man
页面,我想包括可能经常更改的内容,例如 man
页面的编写日期。
例如,我想在 git
repo 中更新 man
页面的日期必须手工完成。
是否有可能 #include
或调用 *roff
文件中的 shell 变量,或者 markdown 文件然后使用pandoc
到“编译” man
页面?
我知道这是一个奇怪的问题,但我没有遇到过类似的问题。
请注意,这不同于简单地在 $MANPATH
中包含一个手册页以供 man
调用。
I.E.,我想使用类似的东西:
.TH foo 10 "$(git log -n1 | grep Date | tail -c 31)" "$(git branch | grep "*")"
而不是每次都必须手动更改日期和 branch/head 名称。无论这是在 markdown 中并提供给 pandoc
或其他东西,还是仅在 roff
文件本身中,我都可以接受。
我从你的示例行中看到你正在使用 Git - 我相信你可以使用 'pre-commit' git hook (基本上是一个在处理你的提交之前运行的脚本)在每次提交时更新联机帮助页的内容(并暂存更改)。
例如,您可以将以下命令放入您的 .git/hooks/pre-commit 文件中,以便在您提交时更新联机帮助页的内容:
sed -i "" "s/^.TH foo 1 \".*/.TH foo 1 \"$(date)\"/" path/to/manpage.roff
git add path/to/manpage.roff
请注意,该路径是相对于 git 存储库根目录的。
考虑使用像 asciidoc 这样的文档生成器语言编写 man
页面的内容,它具有大部分所需的功能。 asciidoc 格式可以包含外部输入文件,并根据需要即时 更改各种内容。
要包含 shell 脚本,请参阅 Asciidoc 中文字内的替换
.
或者可以使用 shell 脚本生成配置文件,然后包含该文件。
如果这个答案目前有点模糊,请提前致歉,因为它更像是一个软件推荐(没有任何实际代码)而不是一个真正的答案。
我正在编写一些自定义 man
页面,我想包括可能经常更改的内容,例如 man
页面的编写日期。
例如,我想在 git
repo 中更新 man
页面的日期必须手工完成。
是否有可能 #include
或调用 *roff
文件中的 shell 变量,或者 markdown 文件然后使用pandoc
到“编译” man
页面?
我知道这是一个奇怪的问题,但我没有遇到过类似的问题。
请注意,这不同于简单地在 $MANPATH
中包含一个手册页以供 man
调用。
I.E.,我想使用类似的东西:
.TH foo 10 "$(git log -n1 | grep Date | tail -c 31)" "$(git branch | grep "*")"
而不是每次都必须手动更改日期和 branch/head 名称。无论这是在 markdown 中并提供给 pandoc
或其他东西,还是仅在 roff
文件本身中,我都可以接受。
我从你的示例行中看到你正在使用 Git - 我相信你可以使用 'pre-commit' git hook (基本上是一个在处理你的提交之前运行的脚本)在每次提交时更新联机帮助页的内容(并暂存更改)。
例如,您可以将以下命令放入您的 .git/hooks/pre-commit 文件中,以便在您提交时更新联机帮助页的内容:
sed -i "" "s/^.TH foo 1 \".*/.TH foo 1 \"$(date)\"/" path/to/manpage.roff
git add path/to/manpage.roff
请注意,该路径是相对于 git 存储库根目录的。
考虑使用像 asciidoc 这样的文档生成器语言编写 man
页面的内容,它具有大部分所需的功能。 asciidoc 格式可以包含外部输入文件,并根据需要即时 更改各种内容。
要包含 shell 脚本,请参阅 Asciidoc 中文字内的替换 .
或者可以使用 shell 脚本生成配置文件,然后包含该文件。
如果这个答案目前有点模糊,请提前致歉,因为它更像是一个软件推荐(没有任何实际代码)而不是一个真正的答案。